package design.simdi.code.final_paper.core.services;

import java.util.List;

import design.simdi.code.final_paper.core.entities.Bibliography;
import design.simdi.code.final_paper.core.entities.Domain;
import design.simdi.code.final_paper.core.entities.Idea;
import design.simdi.code.final_paper.core.entities.Keyword;
import design.simdi.code.final_paper.core.entities.Mesaj;
import design.simdi.code.final_paper.core.entities.Person;
import design.simdi.code.final_paper.core.entities.Project;
import design.simdi.code.final_paper.core.entities.Sesiune;
import design.simdi.code.final_paper.core.entities.StudentAdmis;
import design.simdi.code.final_paper.core.entities.StudentCandidat;
import design.simdi.code.final_paper.utils.StatusStudentCandidat;

/**
 * 
 * @author Marius Dumitriu - (Jun 22, 2010 - 1:41:56 PM)
 * 
 */
public interface ApplicationService {

	// Keyword
	public void saveKeyword(Keyword keyword);

	public void removeKeyword(Keyword keyword);

	public List<Keyword> findAllKeywordsByPerson(Person person);

	// Bibliography

	public void saveBibliography(Bibliography bibliography);

	public void removeBibliography(Bibliography bibliography);

	public List<Bibliography> findAllBibliographiesByPerson(Person person);

	// Idea
	public void saveIdea(Idea idea);

	public void removeIdea(Idea idea);

	// Sesiuni
	public void saveSesiune(Sesiune sesiune);

	public void removeSesiune(Sesiune sesiune);

	public void setDefault(Sesiune sesiune, boolean boole);

	// Domenii
	public void saveDomain(Domain domain);

	public void removeDomain(Domain domain);

	// Proiecte
	public void saveProject(Project project);

	public void removeProject(Project project);

	public Person findPersoanaByProject(Project project);

	// StudentCandidat
	public void saveStudentCandidat(StudentCandidat studentCandidat);

	public void removeStudentCandidat(StudentCandidat studentCandidat);

	public StudentCandidat findStudentCandidatByDomain(Domain domain, Person person);

	public StudentCandidat findStudentCandidatByProject(Project project, Person person);

	public void changeStatus(StudentCandidat sc, StatusStudentCandidat status);

	public boolean canBeAdmited(StudentCandidat sc);

	// Mesaj
	public void saveMesaj(Mesaj mesaj);

	public void removeMesaj(Mesaj mesaj);

	public void markMesajRead(Mesaj mesaj);

	// Persoana
	public Person findPersoanaByStudentCandidat(StudentCandidat sc);

	// Student admis
	public StudentAdmis findStudentAdmisByProject(Project project, StudentCandidat sc);

	public StudentAdmis findStudentAdmisByProject(Project project, Person person);

	public Person findPersoanaByStudentAdmis(StudentAdmis sc);

}
